import os
import subprocess


def clear_screen():
    # 清除屏幕
    subprocess.call('cls' if os.name == 'nt' else 'clear', shell=True)


def get_integer_input(prompt):
    """
    获取用户输入的整数。
    如果输入不是有效的整数，则提示用户重新输入。
    """
    while True:
        user_input = input(prompt)
        try:
            return int(user_input)
        except ValueError:
            print("输入无效，请输入一个整数！")


class Menu:
    def __init__(self, options=[], information_list=[]):
        self.options = options
        self.information_list = information_list

    def display(self):
        """
        显示菜单选项。
        """
        clear_screen()
        for information in self.information_list:
            print(information)
        for index, option in enumerate(self.options, start=1):
            print(f"{index}. {option}")

    def display_and_input(self):
        """
        显示菜单选项。
        """
        clear_screen()
        for information in self.information_list:
            print(information)
        for index, option in enumerate(self.options, start=1):
            print(f"{index}. {option}")
        # 获取用户选择
        options_index = get_integer_input("请选择: ")
        clear_screen()
        print("正在加载中，请稍等")
        return options_index-1

    def reset_all(self, options=[], information_list=[]):
        """
        重设置菜单。
        """
        self.options = options
        self.informations = information_list

    def reset_options(self, options):
        """
        重设菜单选项。
        """
        self.options = options

    def reset_information(self, information_list):
        """
        重设菜单信息。
        """
        self.information_list = information_list

    def add_option(self, option):
        """
        添加菜单选项。
        """
        self.options.append(option)

    def add_options(self, options):
        """
        添加多个菜单选项。
        """
        self.options.extend(options)

    def add_information(self, information):
        """
        添加菜单信息。
        """
        self.information_list.append(information)

    def add_information_list(self, information_list):
        """
        添加多个菜单信息。
        """
        self.information_list.extend(information_list)

    def get_options(self):
        """
        获取菜单选项。
        """
        return self.options

    def get_information_list(self):
        """
        获取菜单信息。
        """
        return self.information_list

    def delete_options(self, names):
        new_options = []
        for item in self.options:
            if not item in names:
                new_options.append(item)
        self.options = new_options

    def delete_information_list(self, names):
        new_information_list = []
        for item in self.information_list:
            if not item in names:
                new_information_list.append(item)
        self.information_list = new_information_list

    def copy(self):
        return Menu(self.options, self.information_list)
